package com.woniu.aimd.prompt;

import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;

public class AiDialogPrompt {

    /* AI润色 */
    public final static String polish_CONTENT_PROMPT =
            "请你当我的笔记润色小助手，帮我修改下面的文字，（md格式输出，不用代码块）让它读起来更专业、意思更准确、表达也更流畅。直接给出修改好的内容。不要原有的修改文本样式\n" +
                    "这是原文：\n" +
                    "------------------------------------\n" +
                    "{content}" +
                    "\n------------------------------------\n\n" +

                    "修改的时候，请注意这几点：\n" +
                    "不要修改我的文本样式，直接帮我润色好后直接给出结果，不要在文末单独列出具体的精简建议或修改点。开头不要有这种“好的，这是为您润色好的文字：”" +
                    "不要修改我的文本样式，直接帮我润色好后直接给出结果，不要在文末单独列出具体的精简建议或修改点。开头不要有这种“好的，这是为您润色好的文字：”" +
                    "不要修改我的文本样式，直接帮我润色好后直接给出结果，不要在文末单独列出具体的精简建议或修改点。开头不要有这种“好的，这是为您润色好的文字：”" +
                    "1.  **中心思想不能变**\n" +
                    "    *   修改时，一定不能改变文章原来的主要观点、信息和它想表达的意思。这是最重要的前提。\n" +
                    "2.  **风格要专业正式**\n" +
                    "    *   请用规范、客观、准确的书面语来写。\n" +
                    "    *   避免口语化、不正式、太主观或者太随意的说法。\n" +
                    "3.  **表达要顺畅准确**\n" +
                    "    *   让句子的结构和组织更合理，逻辑更清晰，读起来更顺畅自然，让读者更容易明白。\n" +
                    "    *   把所有的错别字、用错的标点符号，还有其他明显的语法问题都改过来。\n" +
                    "4.  **专业词汇要统一**\n" +
                    "    *   仔细看看文中的重要专业词语和概念，确保它们在整篇文章里的说法都是统一的。\n" +
                    "    *   如果发现同一个词有好几种说法，请选一个最规范、最常用或者最适合当前语境的说法来统一。如果不好决定，可以在改动的地方或者文章最后说明一下。\n" +
                    "5.  **内容要简洁**\n" +
                    "    *   找出文章里可能存在的明显重复、不必要的废话，或者可以写得更精炼的段落和句子。\n" +
                    "请直接给我修改好的完整文章。\n" +
                    "直接帮我润色好后给出结果，不用有分析，不要有多余的内容";


    /* 答题 （序号不正确）*/
    public static String EXERCISE_PROMPT = "请根据提供的上下文内容生成一份结构清晰的练习题，包含题目和答案两部分。具体要求如下：\n" +
            "\n" +
            "1. 内容分析：\n" +
            "- 仔细理解提供的{content}，提取关键知识点作为出题依据\n" +
            "\n" +
            "2. 题目设计：\n" +
            "- 生成3-5个覆盖核心知识点的题目\n" +
            "- 题目类型可包括：概念解释、细节问答、过程描述等\n" +
            "- 按逻辑顺序排列问题（从基础到进阶）\n" +
            "\n" +
            "3. 答案编写：\n" +
            "- 为每个问题提供准确、简明的答案\n" +
            "- 答案应包含必要的关键信息\n" +
            "\n" +
            "4. 输出格式：\n" +
            "- 先列出所有题目（标注序号）\n" +
            "- 空一行后列出对应答案（与题目序号对应）\n" +
            "- 不使用任何代码块或特殊格式标记\n" +
            "\n" +
            "示例输出：\n" +
            "1. 题目一内容？\n" +
            "2. 题目二内容？\n" +
            "3. 题目三内容？\n" +
            "\n" +
            "答案：\n" +
            "1. 题目一的准确答案\n" +
            "2. 题目二的准确答案\n" +
            "3. 题目三的准确答案\n" +
            "\n" +
            "注意：请直接输出纯文本内容，不要包含字数统计、代码块或额外说明。";

    /* 总结 */
    public static String SUMMARY_PROMPT =
            "## 高级文本总结生成指令\n" +
                    "## **核心任务**：将输入内容提炼为信息更丰富、逻辑分明的总结，严格遵循以下规则：\n" +
                    "\n" +
                    "### 1. 输入处理\n" +
                    "- 接收内容：`{content}`\n" +
                    "- 预处理：自动过滤无关格式符号（如HTML标签、特殊字符等）\n" +
                    "\n" +
                    "### 2. 生成要求\n" +
                    "**结构模板**（必须按此顺序呈现）：\n" +
                    "1. 【核心结论】用2-3句话概括全文核心（不超过60字）\n" +
                    "2. 【关键点】分点列出3-5个核心支撑观点（每个观点不超过30字）\n" +
                    "3. 【建议】如适用，提供1-2条可执行建议（可选，每条不超过25字）\n" +
                    "\n" +
                    "### 3. 质量标准\n" +
                    "- 充实性：总字数控制在120-180字范围内\n" +
                    "- 准确性：禁止添加原文不存在的信息\n" +
                    "- 可读性：使用主谓宾短句结构（示例：\"研究显示：XX技术可提升30%效率\"）\n" +
                    "\n" +
                    "### 4. 风格控制\n" +
                    "- 语气：专业但非学术（避免使用\"本文\"\"笔者\"等主观表述）\n" +
                    "- 术语处理：首次出现缩写时标注全称（例：\"人工智能(AI)\"）\n" +
                    "\n" +
                    "### 5. 异常处理\n" +
                    "- 当检测到矛盾信息时：标注\"[需验证]\"前缀\n" +
                    "- 内容不完整时：输出\"[总结中断]\"并停止生成\n" +
                    "\n" +
                    "### 示例（严格对标）\n" +
                    "输入：一篇关于新能源汽车的3000字报告\n" +
                    "输出：\n" +
                    "## 【核心结论】" +
                    "新能源汽车市场预计将迎来爆发式增长，技术进步与政策支持共同推动行业发展。\n" +
                    "【关键点】\n" +
                    "- 政策补贴将持续至2025年底以鼓励消费\n" +
                    "- 核心部件锂电池的生产成本显著下降40%\n" +
                    "- 全国充电桩的年度覆盖增长率达到25%\n" +
                    "【建议】\n" +
                    "- 消费者可关注补贴政策末班车机会\n" +
                    "\n" +
                    "### 严格禁令\n" +
                    "× 禁止统计字数\n" +
                    "× 禁止使用\"首先/其次\"等序列词\n" +
                    "× 禁止总结摘要本身";


    /* 上下文 */
    public static String OPEN_CONTENT_PROMPT = " " +
            "你是一名智能助手，需要根据以下上下文和用户输入生成连贯回答。\n" +
            "    \n" +
            "    ## 上下文（存储于{content}）:\n" +
            "    {content}\n" +
            "    \n" +
            "    ## 用户输入:\n" +
            "    {userInput}\n" +
            "    \n" +
            "    要求：\n" +
            "    1. 若上下文与用户输入相关，优先结合上下文回答；\n" +
            "    2. 若无关，直接回答用户问题，避免强行关联；\n" +
            "    3. 流式响应时，首句需明确核心观点，后续补充细节；\n" +
            "    4. 语言简洁，分点输出（如需要）。\n" +
            "    \"\"\";";


    public static String EXPLAIN_PROMPT = "" +
            "根据下文用通俗的话解释\"{userInput}\"的含义（限1-2句）：\n" +
            "\n" +
            "[上下文]\n" +
            "{content}\n" +
            "\n" +
            "[待解释词]\n" +
            "{userInput} ";


    public static String HOMEWORK_PROMPT =
            "## 作业生成指令\n" +
                    "\n" +
                    "**输入内容**：{content}\n" +
                    "\n" +
                    "**处理要求**：\n" +
                    "1.  仔细分析输入文本 `{content}` 的内容。\n" +
                    "2.  根据文本内容识别其所属的学科类型。\n" +
                    "3.  根据文本内容和学科类型，判断其适用的年级范围。\n" +
                    "4.  从文本 `{content}` 中准确提取核心知识点。\n" +
                    "5.  基于上述分析和提取的核心知识点，设计5道简答题。\n" +
                    "6.  为每一道简答题提供清晰、准确的参考答案。\n" +
                    "7.  确保题目能够考察对核心知识点的理解和基本应用。\n" +
                    "\n" +
                    "**输出格式**：\n" +
                    "请严格按照以下格式输出，并使用生成作业当天的日期替换 `{date}`：\n" +
                    "\n" +
                    "## 作业\n" +
                    "\n" +
                    "%s \n" +
                    "\n" +
                    "---\n" +
                    "简答题：\n" +
                    "1. [此处为第1道生成的简答题]\n" +
                    "2. [此处为第2道生成的简答题]\n" +
                    "3. [此处为第3道生成的简答题]\n" +
                    "4. [此处为第4道生成的简答题]\n" +
                    "5. [此处为第5道生成的简答题]\n" +
                    "\n" +
                    "参考答案：\n" +
                    "1. [此处为第1道题的参考答案]\n" +
                    "2. [此处为第2道题的参考答案]\n" +
                    "3. [此处为第3道题的参考答案]\n" +
                    "4. [此处为第4道题的参考答案]\n" +
                    "5. [此处为第5道题的参考答案]\n" +
                    "\n" +
                    "**注意事项**：\n" +
                    "-   所有题目及其答案必须严格依据输入文本 `{content}` 的核心内容和知识点。\n" +
                    "-   题目表述应完整、清晰、无歧义。\n" +
                    "-   答案应准确、简洁，并能直接回答对应的问题。\n" +
                    "-   若题目涉及计算（例如数学或物理学科），应明确指出考察点，答案中可包含关键步骤或最终计算结果。\n" +
                    "-   确保5道题目与5个答案一一对应，并按顺序排列。\n" +
                    "-   “简答题：”和“参考答案：”这两个部分标题后，应直接开始罗列题目和答案，不要添加任何额外的引导性文字或说明。\n" +
                    "-   严禁在输出中包含任何形式的思维导图、表格或其他非指定格式的内容。\n" +
                    "-   题目与题目之间、答案与答案之间应使用换行分隔并确保编号正确。";


    // 新增日期格式化方法
    public static String getFormattedDate() {
        return LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }



    public static String promptSwitch(String fun) {
        switch (fun) {
            case "答题":
                return EXERCISE_PROMPT;
            case "总结":
                return SUMMARY_PROMPT;
            case "上下文":
                return OPEN_CONTENT_PROMPT;
            case "解释含义":
                return EXPLAIN_PROMPT;
            case "生成作业":
                return HOMEWORK_PROMPT;
            default:
                return "正常回答用户内容 不要答非所问";
        }
    }
}